package it.clariter.web.action;

import java.io.File;
import java.io.FileInputStream;
import java.util.List;

import it.clariter.dao.AreaDAO;
import it.clariter.dao.AziendaDAO;
import it.clariter.dao.ClienteDAO;
import it.clariter.dao.DocumentoDAO;
import it.clariter.dao.SistemaDAO;
import it.clariter.dao.TipologiaDocumentoDAO;
import it.clariter.dao.VersoDAO;
import it.clariter.model.Area;
import it.clariter.model.Azienda;
import it.clariter.model.Documento;
import it.clariter.model.Sistema;
import it.clariter.model.TipologiaDocumento;
import it.clariter.model.Utente;
import it.clariter.model.Verso;
import it.clariter.utils.DateUtils;
import it.clariter.web.form.DocumentoForm;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class NuovoDocumentoAction extends Action {

	@Override
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		// SECURITY
		if(request.getSession().getAttribute("utente")==null){
			response.sendRedirect("login.jsp");
		}
		// LISTA PER TORNARE ALLA LISTADOCUMENTO.JSP
		HttpSession session = request.getSession();
		List<Documento> listaDocumenti = new DocumentoDAO().findByExample((Documento) session.getAttribute("documentoPerRicerca"));
		session.setAttribute("documenti", listaDocumenti);
		
		File f=null;
		FileInputStream fis=null;
		
		DocumentoForm l = (DocumentoForm) form;
		
		//SETTAGGIO DOCUMENTO DA FORM
		Documento doc = new Documento();
		doc.setLocalizzazione(l.getLocalizzazione());
		doc.setDescrizione(l.getDescrizione());
		doc.setDataDocumento(DateUtils.parseDateEvolution(l.getDataDocumento()));
		Area area = new AreaDAO().get(l.getIdArea());
		Verso verso = new VersoDAO().get(l.getIdVerso());
		TipologiaDocumento tipdoc = new TipologiaDocumentoDAO().get(l.getIdTipologia());
		Azienda azienda = new AziendaDAO().get(l.getIdAzienda());
		doc.setArea(area);doc.setAzienda(azienda);doc.setTipologiaDocumento(tipdoc);doc.setVerso(verso);
		
		//SETTAGGIO CLIENTE/DESTINATARIO/MITTENTE
		if(request.getParameter("mittenteCliente").equals("-1"))
			doc.setMittenteDestinatario((String) request.getParameter("mittenteDestinatario"));
		else
			doc.setMittenteDestinatario(
					new ClienteDAO().get(Integer.parseInt((String) request.getParameter("mittenteCliente"))).getDescrizione());
		
		//SETTAGGIO DEL DOCUMENTO
		if(request.getAttribute("path")==null || ((String)request.getAttribute("path")).trim().equals(""))
			doc.setDocumento(null);
		else {
			try{
			String path = (String) request.getAttribute("path");
			f = new File(path);
			fis = new FileInputStream(f);
			}catch(Exception e){
				//FILE NOT FOUD
				session.setAttribute("messaggio", "Errore nel caricamento del file: PDF non trovato");
				return mapping.findForward("ok");
			}
		}
		
		//GENERAZIONE PROTOCOLLO
		Sistema sis = new Sistema().generaSistema();
		String protocollo=doc.getAzienda().getCodice()+"-"+sis.getProgressivo()+"-"+sis.getMeseAnno()+"-"+
				doc.getTipologiaDocumento().getCodice()+"-"+doc.getVerso().getCodice()+"-"+doc.getArea().getCodice();
		doc.setProtocollo(protocollo);
		
		//SETTAGGI AUTOMATICI DI SISTEMA
		doc.setDataProtocollo(DateUtils.getCurrentDate());
		doc.setUtente((Utente) session.getAttribute("utente"));
		
		//INSERT E UPDATE
		new DocumentoDAO().insert(doc,fis,f);
		new SistemaDAO().update(sis);
		
		request.setAttribute("messaggio", "Inserimento effettuato: Protocollo: "+doc.getProtocollo());
		
		listaDocumenti = new DocumentoDAO().findByExample((Documento) session.getAttribute("documentoPerRicerca"));
		session.setAttribute("documenti", listaDocumenti);
		
		return mapping.findForward("ok");

	}

}
